package org.example.campusforum.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.example.campusforum.dto.ArticlePublish;
import org.example.campusforum.entity.Article;
import org.example.campusforum.vo.ArticleDetailsReturn;

/**
 * 文章服务接口
 *
 * 提供文章相关的业务逻辑处理，包括文章的发布、删除、查询详情和点赞等功能。
 * 继承MyBatis Plus的IService接口，提供基础的CRUD操作。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
public interface ArticleService extends IService<Article> {

    /**
     * 发布文章
     *
     * 根据文章发布DTO创建新文章，设置当前用户为作者，
     * 并将文章状态设置为审核通过。
     *
     * @param articlePublish 文章发布信息
     */
    void save(ArticlePublish articlePublish);

    /**
     * 删除文章
     *
     * 执行逻辑删除操作，将文章标记为已删除状态，
     * 而不是物理删除数据库记录。
     *
     * @param id 文章ID
     */
    void deleteById(Long id);

    /**
     * 获取文章详情
     *
     * 查询文章的完整信息，包括文章内容、作者信息、
     * 图片列表和评论列表等。同时增加文章浏览量。
     *
     * @param id 文章ID
     * @return 文章详情信息
     */
    ArticleDetailsReturn getArticleDetails(Long id);

    /**
     * 文章点赞
     *
     * 对指定文章进行点赞操作，如果用户已点赞则取消点赞，
     * 如果未点赞则添加点赞记录。
     *
     * @param id 文章ID
     * @return 点赞操作结果（1-点赞成功，0-取消点赞）
     */
    int like(Long id);
}
